package com.atguigu.d_variable;
/*
    1. 在子类中访问父类的成员变量
        a . 子类可以使用父类所有非私有的成员变量
        b . 子类要强制访问父类成员变量 : super.变量名

    2. 在父类中访问子类的成员变量
        a. 在父类中不能直接访问子类成员变量
        b. 在父类中创建子类对象,使用子类对象访问

    3. 在第三方类中创建子类对象访问父类成员变量
        a. 可以直接访问不同名的成本变量
        b. 访问不了子父类中同名变量 -> 只能访问子类自己的该变量

    4. 在第三方类中创建父类对象访问子类成员变量 : 不可以访问
 */
public class Demo {//第三方类
    public static void main(String[] args) {
        //创建子类对象访问父类成员
        Zi zi = new Zi();
        System.out.println("zi.numZi = " + zi.numZi);
        System.out.println("zi.numFu = " + zi.numFu);
        System.out.println("zi.num = " + zi.num);//子类自己的num

        //创建父类对象访问子类成员
        Fu fu = new Fu();
        System.out.println("fu.num = " + fu.num);
        System.out.println("fu.numFu = " + fu.numFu);
        //fu.numZi

    }
}

class Fu{
    //成员变量
    int num = 111;
    int numFu = 222;

    public void show(){
        //在类中访问自己的成员变量
        System.out.println("num = " + num);
        System.out.println("numFu = " + numFu);

        //在父类中访问子类的成员变量
        Zi zi = new Zi();
        System.out.println("zi.num = " + zi.num);
        System.out.println("zi.numZi = " + zi.numZi);
    }
}

class Zi extends Fu{
    //成员变量
    int num = 100;
    int numZi = 200;

    public void show(){
        //访问本类成员
        System.out.println("num = " + num);
        System.out.println("numZi = " + numZi);

        //访问父类成员
        System.out.println("numFu = " + numFu);
        int num = 1000;
        System.out.println("num = " + num); //局部
        System.out.println("this.num = " + this.num);//本类成员
        System.out.println("super.num = " + super.num);//本类父类成员
    }
}
